package io;

public class CharDemo {

  /*
  分词过程中 会对经常使用char 操作
   */
  public static void main(String[] args) {

    test(); //toLowerCase
    test1();
    test2(); //Character.codePointAt
    System.out.println("=========");
    test3(); //0-255 char对应的字符

    /*
    Character.charCount(c) 查看c是否是unicode代码点，如果是等于或大于0x010000，那么该方法返回2。否则，该方法返回1
    1. unicode的表现形式
      在表示Unicode字符时，通常会用U+然后紧跟一组16进制的数字表示一个字符
      在基本多文种平面（第零平面）Basic MultilingualPlane（BMP）里所有的字符都使用4位16进制表示，编码从U+0000到U+FFFF,共支持65536个字符
      Unicode就像一张表，包所有的字符都编写到表中，每一个字符对应一个数字，称为码点（code point）,这个数字一般不直接使用，通过不同的编码方式来使用
      UTF-8、UTF-16、UTF-32就是将数字转换到程序数据的编码方案。UTF是“UnicodeTransformation Format”的缩写，可以翻译成Unicode字符集转换格式，
      即怎样将Unicode定义的数字转换成程序数据
     */
    test4();

    System.out.println(0x010000); //65536
    System.out.println((char) 0x010000);
    System.out.println(Character.charCount(0x010001)); //65536
    System.out.println((int) '合');
  }

  /*
  toLowerCase
   */
  public static void test() {
    System.out.println(Character.toLowerCase('A'));
    System.out.println(Character.toLowerCase('1'));
    System.out.println(Character.toLowerCase('哈'));
    System.out.println("A".toLowerCase());
  }

  //i.toCharArray();
  public static void test1() {
    String i = "i love you";
    char[] chars = i.toCharArray();
    for (int i1 = 0; i1 < chars.length; i1++) {
      System.out.println(chars[i1] + "," + (int) chars[i1]);
    }
  }

  /*
  Character.codePointAt(c, index, limit);
   */
  public static void test2() {

    // create a char array c and assign values
    char[] c = new char[]{'a', 'b', 'c', 'd', 'e'};

    // create and assign value to inetgers index, limit
    int index = 2, limit = 3;

    // create an int i
    int i;

    // assign result of codePointAt on array c at index to i using limit
    i = Character.codePointAt(c, index, limit);

    // print i value
    System.out.println(i + ":" + (char) i + ":" + c[index]);
  }

  public static void test3() {
    for (int i = 0; i < 256; i++) {
      System.out.print((char) i);
      System.out.print("-");
    }
    System.out.println();
  }

  public static void test4() {
    char c = 'a';
    System.out.println(Character.charCount(c));

    int codePoint = 0x010002;
    System.out.println("0x010002codepoint" + (char) codePoint);

    String codePointStr = "\u0002";
    char[] chars = codePointStr.toCharArray();
    System.out.println("0x010002codepoint 的char数组长度" + chars.length);

    int x = Character.charCount(codePoint);
    System.out.println(x);

  }

}
